/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sisgraf.model;

import java.io.Serializable;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author POSITIVO R41
 */
@Entity
public class ItemOrcamento implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
        @GeneratedValue
        private Integer id;
//    private Integer idOrcamento;
    private String descricao;
    private Integer quantidade;
    private short comprimento;
    private short largura;
    @Temporal(javax.persistence.TemporalType.DATE)
        private Date dataAprovacao;
    @Temporal(javax.persistence.TemporalType.DATE)
        private Date dataCancelamento;
    @Temporal(javax.persistence.TemporalType.DATE)
        private Date prazoEntrega;
    
    @ManyToOne(optional = false)
        @JoinColumn(name="idOrcamento",referencedColumnName="id")
        private Orcamento orcamento;
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
        private Set<ServicoItemOrcamento> servicoItemOrcamento;

    public ItemOrcamento() {
        id=null;
        descricao=null;
        quantidade=null;
        comprimento=0;
        largura=0;
        dataAprovacao=null;
        dataCancelamento=null;
        prazoEntrega=null;
        servicoItemOrcamento = new HashSet<ServicoItemOrcamento>();
    }

    public ItemOrcamento(int id) {
        this.id = id;
        descricao=null;
        quantidade=null;
        comprimento=0;
        largura=0;
        dataAprovacao=null;
        dataCancelamento=null;
        prazoEntrega=null;
        servicoItemOrcamento = new HashSet<ServicoItemOrcamento>();
    }

    public ItemOrcamento(int id, String descricao, int quantidade, short comprimento, short largura, Date prazoEntrega) {
        this.id = id;
        this.descricao = descricao;
        this.quantidade = quantidade;
        this.comprimento = comprimento;
        this.largura = largura;
        this.prazoEntrega = prazoEntrega;
        this.dataAprovacao=null;
        this.dataCancelamento=null;
        this.servicoItemOrcamento = new HashSet<ServicoItemOrcamento>();
    }

    public Integer getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public Integer getQuantidade() {
        return quantidade;
    }

    public void setQuantidade(int quantidade) {
        this.quantidade = quantidade;
    }

    public short getComprimento() {
        return comprimento;
    }

    public String getComprimentoToString() {
        return String.valueOf(comprimento);
    }

    public void setComprimento(short comprimento) {
        this.comprimento = comprimento;
    }

    public short getLargura() {
        return largura;
    }

    public String getLarguraToString() {
        return String.valueOf(largura);
    }

    public void setLargura(short largura) {
        this.largura = largura;
    }

    public Date getDataAprovacao() {
        return dataAprovacao;
    }

    public String getDataAprovacaoForm() {
        String data="  /  /    ";
        if (this.dataAprovacao!=null){
            SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
            data = formato.format(this.dataAprovacao );
        }
        if (data.equals("")) data = "  /  /    ";
        return data;
    }
    public void setDataAprovacao(Date dataAprovacao) {
        this.dataAprovacao = dataAprovacao;
    }
    public void setDataAprovacao(String dataAprovacao) {
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
        Date data=null;
        try {
            data = formato.parse(dataAprovacao);
        } catch (ParseException ex) {
            data=null;
        } finally {
            this.dataAprovacao = data;
        }
    }
    public Date getDataCancelamento() {
        return dataCancelamento;
    }
    public String getDataCancelamentoForm() {
        if (this.dataCancelamento==null){
            return "  /  /    ";
        } else {
            SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
            String data = formato.format(this.dataCancelamento );
            if (data.equals("")) data="  /  /    ";
            return data;
        }
    }
    public void setDataCancelamento(Date dataCancelamento) {
        this.dataCancelamento = dataCancelamento;
    }
    public void setDataCancelamento(String dataCancelamento) {
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
        java.util.Date data=null;
        try {
            data = formato.parse(dataCancelamento);
        } catch (ParseException ex) {
            data=null;
        } finally {
            this.dataCancelamento = data;
        }
    }
    public Date getPrazoEntrega() {
        return prazoEntrega;
    }
    public String getPrazoEntregaForm() {
        String data="";
        if (prazoEntrega!=null){
            SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
            data = formato.format(this.prazoEntrega);
        }
        if (data.equals("")) data="  /  /    ";
        return data;
    }
    public void setPrazoEntrega(Date prazoEntrega) {
        this.prazoEntrega = prazoEntrega;
    }

    public void setPrazoEntrega(String prazoEntrega) {
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
        java.util.Date data=null;

        try {
            data = formato.parse(prazoEntrega);
        } catch (ParseException ex) {
            data=null;
        } finally {
            this.prazoEntrega = data;
        }
    }

    public Orcamento getOrcamento() {
        return orcamento;
    }


    public void setOrcamento(Orcamento orcamento) {
        this.orcamento = orcamento;
    }
 
    public Set<ServicoItemOrcamento> getServicoItemOrcamento() {
        return servicoItemOrcamento;
    }
    public ServicoItemOrcamento getServicoItemOrcamento(Integer id) {
        ServicoItemOrcamento pesq;
        Iterator it = servicoItemOrcamento.iterator();
	while (it.hasNext())
	{
	   pesq= (ServicoItemOrcamento) it.next();
           if (id.equals(pesq.getId())){
               return pesq;
           }
	}
        return null;
    }
    public boolean excluiServicoItemOrcamento(Integer id) {
        ServicoItemOrcamento pesq;
        Iterator it = servicoItemOrcamento.iterator();
	while (it.hasNext())
	{
	   pesq= (ServicoItemOrcamento) it.next();
           if ((pesq.getId()+0)==id){
               it.remove();
               return true;
           }
	}
        return false;
    }
    public void setServicoItemOrcamento(Set<ServicoItemOrcamento> servicoItemOrcamento) {
        this.servicoItemOrcamento = servicoItemOrcamento;
    }
    public void setServicoItemOrcamento(ServicoItemOrcamento servicoItemOrcamento) {
        this.servicoItemOrcamento.add(servicoItemOrcamento);
    }
    public BigDecimal getValor(){
        BigDecimal retorno=new BigDecimal("0");
        ServicoItemOrcamento pesq;
        Iterator it = servicoItemOrcamento.iterator();
	while (it.hasNext())
	{
	   pesq= (ServicoItemOrcamento) it.next();
           retorno=retorno.add(pesq.getValorTotal());
	}
        return retorno;  // desenvolver codigo para calcular valor, somatorio dos serviços
    }
    public String getValorForm() {
        String valor = this.getValor().toString();
        valor = valor.replace('.', ',');
        return valor;
    }

}
